import { useEffect, useRef } from "react"

/**
 * 自定义钩子useInterval
 * @param {Function} callback -需要定时调用的函数
 * @param {number | null} delay  -定时器的延迟时间（以毫秒为单位），传入null可以暂停定时器
 */
function useInterval(callback: Function, delay: number) {
  const saveCallback = useRef<Function>()
  //保存新的回调
  useEffect(() => {
    saveCallback.current = callback
  }, [callback])

  //设置定时器
  useEffect(() => {
    function tick() {
      if (saveCallback.current) {
        saveCallback.current()
      }
    }

    if (delay !== null) {
      let timeId = setInterval(tick, delay)
      return () => clearInterval(timeId)
    }
  }, [delay])
}
export { useInterval }
